Automatisches Löschen von Dateien und Ordnern mit Powershell

In der Welt der IT ist Ordnung das halbe Leben. Insbesondere die Verwaltung von Servern erfordert ein effizientes Datei-Management. Hierbei kommt die Automatisierung ins Spiel, die nicht nur Zeit spart, sondern auch zur Einhaltung von Sicherheitsrichtlinien beiträgt. In diesem Blogbeitrag zeigen wir Euch, wie Ihr mithilfe eines PowerShell-Skripts das Löschen von Dateien und Ordnern automatisieren könnt.

Ich für meinen Teil habe das Script vor einigen Monaten geschrieben, da ich die Anforderung hatte, Dateien aus einem bestimmten Verzeichnis nach 2 Jahren löschen zu lassen. Damit ich nicht immer hinterher sein muss, hab ich das Script geschrieben, welches mir die Arbeit abnimmt.

Grundlagen des PowerShell-Skriptings

Zunächst einmal: Was ist PowerShell? Es handelt sich um eine leistungsstarke Skriptsprache, die für Automatisierung und Konfigurationsmanagement verwendet wird. PowerShell ermöglicht es, repetitive Aufgaben, wie die Datei- und Ordnerbereinigung, zu automatisieren, was ein wesentlicher Bestandteil der Systemwartung ist.

Das Herzstück: Das WIN-CleanOldFiles-Skript

# Script Name:  WIN-CleanOldFiles.ps1
# Beschreibung: Löscht Dateien und Verzeichnisse, die älter als ein definierter Zeitraum sind
# Aufruf:       -
# Autor:        Patrick Asmus
# Web:          https://www.media-techport.de
# Git-Reposit.: https://git.media-techport.de/scriptos/win-cleanoldfiles.git
# Version:      1.0
# Datum:        08.11.2023
# Modifikation: Initial
#####################################################

# Variablen
$Verzeichnis = "D:\temp"
$ZeitrahmenInTagen = 730
$LogPfad = "C:\logs\CleanOldFiles.log"

# Berechnung Startdatum des Zeitrahmens
$Startdatum = (Get-Date).AddDays(-$ZeitrahmenInTagen)
$GelöschtdurchScriptAm = Get-Date

# Funktion zur Formatierung des Datums im deutschen Stil
function Format-DeutschesDatum ([datetime] $date) {
    return $date.ToString("dd.MM.yyyy")
}

# Lösche Dateien und Verzeichnisse, die älter als der angegebene Zeitraum sind
$GelöschteDateien = @()
$GelöschteVerzeichnisse = @()

Get-ChildItem -Path $Verzeichnis -Recurse | ForEach-Object {
    if ($_.LastWriteTime -lt $Startdatum) {
        if ($_.PSIsContainer) {
            $_ | Remove-Item -Force -Recurse
            $GelöschteVerzeichnisse += $_.FullName
            $LogMeldung = "Ordner gelöscht am: $(Format-DeutschesDatum $GelöschtdurchScriptAm) | $($_.FullName)"
            Write-Output $LogMeldung
            $LogMeldung | Out-File -Append -FilePath $LogPfad
        } else {
            $_ | Remove-Item -Force
            $GelöschteDateien += $_.FullName
            $LogMeldung = "Datei gelöscht am: $(Format-DeutschesDatum $GelöschtdurchScriptAm) | Letzte Änderung: $(Format-DeutschesDatum $_.LastWriteTime) | $($_.FullName)"
            Write-Output $LogMeldung
            $LogMeldung | Out-File -Append -FilePath $LogPfad
        }
    }
}

# Überprüfe, ob das Verzeichnis leer ist, und entferne es gegebenenfalls
if ((Get-ChildItem -Path $Verzeichnis | Measure-Object).Count -eq 0) {
    Remove-Item -Path $Verzeichnis -Force -Recurse
    $GelöschteVerzeichnisse += $Verzeichnis
    $LogMeldung = "Ordner gelöscht am: $(Format-DeutschesDatum $GelöschtdurchScriptAm) | $Verzeichnis"
    Write-Output $LogMeldung
    $LogMeldung | Out-File -Append -FilePath $LogPfad
}

Das Skript „WIN-CleanOldFiles“ ist ein hervorragendes Beispiel für effiziente Automatisierung. Es dient dazu, Dateien und Verzeichnisse, die älter als ein definierter Zeitraum sind, automatisch zu löschen. Diese Art von Skripten ist meiner Meinung nach unerlässlich für die Logfile-Bereinigung und das Speicherplatzmanagement.

Schritt-für-Schritt: Wie das Skript funktioniert

Das Skript beginnt mit der Definition des Zielverzeichnisses und des Zeitrahmens. Alles, was älter als die definierte Zeitspanne ist, wird gelöscht. Wichtig dabei ist, dass das Skript auch eine Logging-Funktion beinhaltet, welche die gelöschten Dateien und Ordner protokolliert – ein Muss für die Nachvollziehbarkeit und ggf. der Einhaltung von Sicherheitsrichtlinien.

Integration in die Systemwartung: Der Einsatz von Task Scheduler

Um das Skript zeitgesteuert auszuführen, könnt Ihr den Windows Task Scheduler nutzen. Dieser ermöglicht es, das Skript zu festgelegten Zeiten automatisch auszuführen, was ein wesentlicher Bestandteil von Zeitgesteuerten Skripten ist. So sorgt Ihr für regelmäßige Ordnerbereinigung ohne manuellen Aufwand.

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
-command "C:\scripts\WIN-CleanOldFiles.ps1"

Best Practices: Sicherheit und Effizienz

Es ist wichtig, bei der Automatisierung von Löschvorgängen vorsichtig zu sein. Stellt bitte sicher, dass Ihr geeignete Sicherheitsrichtlinien implementiert, um Datenverlust zu vermeiden. Zudem empfiehlt es sich, regelmäßige Backups durchzuführen, um im Falle eines Fehlers abgesichert zu sein.

Ein sauberes System ist ein gesundes System

Zusammenfassend lässt sich sagen, dass die Automatisierung von Datei-Management und Systemwartung mithilfe von PowerShell-Skripten ein wichtiger Schritt zur Effizienzsteigerung und zur Einhaltung von Sicherheitsstandards ist. Mit dem WIN-CleanOldFiles-Skript habt Ihr ein mächtiges Werkzeug in der Hand, um Eure Server sauber und leistungsfähig zu halten.

Download

Das Script könnt Ihr euch bei Bedarf hier runterladen: https://git.media-techport.de/scriptos/win-cleanoldfiles

Danke fürs Teilen!